// 数据库测试数据准备脚本
// 在测试前自动创建测试数据

// 数据库初始化任务
Cypress.Commands.add('setupTestDatabase', () => {
  cy.log('开始准备测试数据...')
  
  // 准备测试数据的API调用
  const testDataSetup = [
    // 1. 创建测试订单
    {
      method: 'POST',
      url: '/api/test/setup/orders',
      body: [
        {
          orderNo: 'TEST123',
          machineId: 'M05',
          smtSide: 'TOP',
          orderStatus: 'ACTIVE'
        },
        {
          orderNo: 'TEST456', 
          machineId: 'M06',
          smtSide: 'BOTTOM',
          orderStatus: 'ACTIVE'
        }
      ]
    },
    
    // 2. 创建测试作业员
    {
      method: 'POST',
      url: '/api/test/setup/users',
      body: [
        {
          operatorId: 'TESTOP001',
          operatorName: '测试作业员一',
          operatorType: 'OPERATOR',
          status: 'ACTIVE'
        },
        {
          operatorId: 'TESTOP002',
          operatorName: '测试作业员二', 
          operatorType: 'OPERATOR',
          status: 'ACTIVE'
        }
      ]
    },

    // 3. 创建测试Roll数据
    {
      method: 'POST',
      url: '/api/test/setup/rolls',
      body: [
        {
          rollNo: 'TESTROLL001',
          partId: 'TESTPART001',
          lotNo: 'TESTLOT001',
          status: 'AVAILABLE',
          quantity: 1000,
          remainQuantity: 1000
        },
        {
          rollNo: 'TESTROLL002',
          partId: 'TESTPART002', 
          lotNo: 'TESTLOT002',
          status: 'AVAILABLE',
          quantity: 2000,
          remainQuantity: 2000
        }
      ]
    }
  ]

  // 执行数据准备API调用
  testDataSetup.forEach((setup, index) => {
    cy.apiRequest(setup.method, setup.url, setup.body).then((response) => {
      cy.log(`数据准备${index + 1}: ${response.status}`)
      // 即使API不存在也继续测试（因为可能需要手动插入数据）
    })
  })
})

// 清理测试数据
Cypress.Commands.add('cleanupTestDatabase', () => {
  cy.log('清理测试数据...')
  
  // 清理测试数据的API调用
  cy.apiRequest('DELETE', '/api/test/cleanup/all').then((response) => {
    cy.log(`数据清理: ${response.status}`)
  })
})

// 验证测试数据是否存在
Cypress.Commands.add('verifyTestDataExists', () => {
  cy.log('验证测试数据...')
  
  // 验证测试订单存在
  cy.apiRequest('GET', '/api/smt/order/TEST123').then((response) => {
    cy.log(`订单TEST123验证: ${response.status}, code: ${response.body.code}`)
    if (response.status === 200 && response.body.code === '00000') {
      cy.log('✅ 测试订单数据存在')
    } else {
      cy.log('⚠️ 测试订单数据可能不存在，将使用现有数据进行测试')
    }
  })
  
  // 验证测试作业员存在  
  cy.apiRequest('GET', '/api/workers/TESTOP001').then((response) => {
    cy.log(`作业员TESTOP001验证: ${response.status}, code: ${response.body.code}`)
    if (response.status === 200 && response.body.code === '00000') {
      cy.log('✅ 测试作业员数据存在')
    } else {
      cy.log('⚠️ 测试作业员数据可能不存在，将使用现有数据进行测试')
    }
  })
})

// 手动数据库初始化命令（如果没有API端点）
Cypress.Commands.add('manualDatabaseSetup', () => {
  cy.log('⚠️ 请手动执行SQL脚本: cypress/fixtures/test-data-setup.sql')
  cy.log('或者确保数据库中有以下测试数据:')
  cy.log('- 订单: TEST123, TEST456')
  cy.log('- 作业员: TESTOP001, TESTOP002')
  cy.log('- Roll: TESTROLL001, TESTROLL002')
})